package com.dljd.javase.t4;

import java.util.Arrays;
import java.util.Scanner;

/*
数组章节知识点演示案例
 */
public class ArrayDemo {

    //数组的创建基本语法
    public static void test1(){
        //1.推荐用这种数组的声明语法
        int[]  ages=new int[30];
        //2.不推荐用这种数组的声明语法
        int    ages1[]=new int[30];
        //数组的赋值操作
        ages[0]=28;
        ages[1]=30;

        //数组的取值操作
        System.out.println(ages[0]);

        //获取数组的长度
        System.out.println(ages.length);

        //遍历数组元素
        for(int n=0;n<ages.length;n++){
            System.out.print(ages[n]+",");
        }

        //数组创建时并赋值

        int[] ages3=new int[]{29,28,2,32,34,23};
    }

    //数组创建好之后每种类型都有默认值
    public static void testDefaultValue(){
        short[] dd=new short[10];
        float[] aa=new float[10];
        char[] bb=new char[10];
        boolean[] cc=new boolean[10];
        String[] names=new String[10];
        for(int n=0;n<10;n++){
            System.out.println(dd[n]+"-"+aa[n]+"-"+bb[n]+"-"+cc[n]+"-"+names[n]);
        }
    }

    //获取10个学生的成绩，然后保存在数组中，最后计算学生的总分和平均分。
    public static void test2(){
        Scanner s=new Scanner(System.in);
        float allScores=0;
        float avgScore=0;
        float[] scores=new float[10];
        for(int n=0;n<scores.length;n++) {
            System.out.println("请输入第"+(n+1)+"个学生的成绩");
            scores[n] = s.nextFloat();
        }
        //使用循环把数组里面的每个元素累加到总分变量里面
        for(int n=0;n<scores.length;n++){
            allScores+=scores[n];
        }
        avgScore=allScores/scores.length;
        System.out.println("10个学生的总分是"+allScores);
        System.out.println("10个学生的平均分是"+avgScore);
    }


    //两个数组直接互相赋值之后，相当于指向同一块内存地址
    public static void test3(){
//        int[] arr1 = {1, 2, 3, 4, 5};
//        int[] arr2 = arr1;
//        arr2[2] = 33;
//        System.out.println(arr1[2]); // 输出结果为？？？

        int[] arr1 = {1, 2, 3};
        int[] arr2 = arr1;
        arr1 = null;
        System.out.println(arr1[2]); // 输出结果为？？？
        System.out.println(arr2[2]); // 输出结果为？？？
    }

    //基本类型的参数传递
    public static void changeValue(int num1,int num2){
        num1=22;
        num2=33;
        System.out.println(num1);
        System.out.println(num2);
    }
    //引用类型的参数传递
    public static void changeArray(int[] nums){
        nums[0]=111;
        nums[1]=222;
    }
    //求数组中的最大值
    public static void getMaxNum(){
        int[] nums=new int[20];
        //给数组随机生成20个0-100之间的数字存储到数组的每个位置上
        for(int n=0;n<20;n++){
            nums[n]=((int)(Math.random()*10000))%100;
        }
        System.out.println(Arrays.toString(nums));

        int max=nums[0];
        for(int n=1;n<20;n++){
            if(nums[n]>max){
                max=nums[n];
            }
        }
        System.out.println("数组的最大值："+max);
    }

    //定义一个方法，方法的作用是在给定的数组中查找指定元素的位置

    public static  int search(int[] nums,int value){
        for(int n=0;n<nums.length;n++){
            if(value==nums[n]){
                return  n;//如果找到了，则立马返回这个下标，通知终止方法
            }
        }
      return -1;//如果上面的循环执行完了，都没找到，说明这个值不存在，不存在的话我也要返回一个结果-1，
    }

    public static void main(String[] args) {
        //test2();
//        test3();
        getMaxNum();

        //基本数据类型传参数演示
        int a=99,b=88;
        System.out.println(a+","+b);
        changeValue(a,b);
        System.out.println(a+","+b);


        //引用数据类型传参数演示
        int[] aa={1,2};
        System.out.println(aa[0]+"-"+aa[1]);
        changeArray(aa);
        System.out.println(aa[0]+"-"+aa[1]);

        //调用'查找数组中某个元素位置'的方法演示
        int[] aaa={23,32,4,3453,2,321,343,452,324};
        int weizhi=search(aaa,452);
        System.out.println("这个数值在数组中的位置是:"+((weizhi==-1)?"不存在":weizhi));

        //for-each循环的演示
        int[]  bbb={555,333,666,777,888,999,111};
        for(int a_:bbb){
            System.out.println(a_);
        }

        //swtich-case早期只支持int,short byte,char,jdk7之后支持String类型

        String name="jack";
        switch (name){
            case "jack":{
                System.out.println("he is a policeman");
                break;
            }
            case "rose":{
                System.out.println("he is a teacher");
                break;
            }

        }
    }
}